package dao;

import java.io.Serializable;
import java.util.List;

import modelo.Propietario;
import modelo.Usuario;

import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;

import util.HibernateUtil;

public class UsuarioDao implements Serializable{

	private static final long serialVersionUID = 8013233621407790956L;
	private Session session;
	SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
	
	public UsuarioDao() {
		super();
	}
	
	public List<Usuario> obtenerUsuarios() {
		session=sessionFactory.openSession();
		
		Query query = session.createQuery("SELECT b FROM Usuario b");
		List<Usuario> b = query.list();
		
		session.close();
		
		return b;
	}
	
	public Usuario obtenerUsuario(Usuario u) {
		Usuario usuario =  new Usuario();
		
		session=sessionFactory.openSession();
		Criteria crit = session.createCriteria(Usuario.class)
				.createAlias("persona", "persona")
				.setFetchMode("persona", FetchMode.JOIN)					
				.createAlias("estadousuario", "estado")
				.setFetchMode("estado", FetchMode.JOIN)
				.createAlias("perfil", "perfil")
				.setFetchMode("perfil", FetchMode.JOIN)					
				.add(Restrictions.eq("nombreUsuario", u.getNombreUsuario()))
				.add(Restrictions.eq("contrasenia", u.getContrasenia()))
                .add(Restrictions.eq("estado.idEstadoUsuario", 2));
		 
		usuario= (Usuario) crit.list().get(0);
		
		session.close();
		
		return usuario;
		
		}
	
	public boolean validarUsuario(Usuario u)
	{
		session=sessionFactory.openSession();
		Criteria crit = session.createCriteria(Usuario.class)
				.createAlias("estadousuario", "estado")
				.setFetchMode("estado", FetchMode.JOIN)				
				.add(Restrictions.eq("nombreUsuario", u.getNombreUsuario()))
				.add(Restrictions.eq("contrasenia", u.getContrasenia()))
                .add(Restrictions.eq("estado.idEstadoUsuario", 2));
		 
		List<Usuario> p= crit.list();
		
		session.close();
		
		if(p.isEmpty())
		{
			return false;
		}
		else
		{
			return true;
		}
		
	}

	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
	}
